# -*- coding: utf-8 -*-

# Max-Planck-Gesellschaft zur Förderung der Wissenschaften e.V. (MPG) is
# holder of all proprietary rights on this computer program.
# You can only use this computer program if you have closed
# a license agreement with MPG or you get the right to use the computer
# program from someone who is authorized to grant you that right.
# Any use of the computer program without a valid license is prohibited and
# liable to prosecution.
#
# Copyright©2020 Max-Planck-Gesellschaft zur Förderung
# der Wissenschaften e.V. (MPG). acting on behalf of its Max Planck Institute
# for Intelligent Systems. All rights reserved.
#
# Contact: ps-license@tuebingen.mpg.de

import torch


def reparameterize(mu, logvar, seed=None):
    std = torch.exp(logvar / 2)

    if seed is None:
        eps = std.data.new(std.size()).normal_()
    else:
        generator = torch.Generator(device=mu.device)
        generator.manual_seed(seed)
        eps = std.data.new(std.size()).normal_(generator=generator)

    return eps.mul(std).add_(mu)